Analyse de la pandémie de COVID-19 aux États-Unis
Présentation du Projet
Dans ce projet, on utilisera plusieurs données liées au COVID-19 aux États-Unis . L’objectif principal est de répondre à certaines questions qui seront posées (section 4) en explorant ces données réelles et en appliquant les techniques de visualisation de données.
Pour faire cela, nous devrons d’abord rendre les données au format “tidy”.
On trouvera dans ces données, la population pour chaque État, le nombre de personnes inféctées, décédées, …
Packages Utilisés
Ces packages sont les packages initiales qu’on utilisera tout au long de notre projet, il se peut qu’on chargera d’autre package dans la suite pour utiliser quelques fonctions…
library(tidyverse)## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5 ✓ purrr 0.3.4
## ✓ tibble 3.1.6 ✓ dplyr 1.0.8
## ✓ tidyr 1.2.0 ✓ stringr 1.4.0
## ✓ readr 2.1.2 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(lubridate)##
## Attachement du package : 'lubridate'
## Les objets suivants sont masqués depuis 'package:base':
##
## date, intersect, setdiff, union
# pour la lecture des fichiers excel
library(readxl)1 - Importations des données et modifications
COVID-19 :
Ce jeu de données contients des informations sur le nombre de personne inféctés, décédées et guéris, … du COVID-19 aux États-Unis.
source des données : https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports_us
page web : https://coronavirus.jhu.edu/us-map
# on récupère les fichiers csv
COVID_data_path <- "csse_covid_19_daily_reports_us/"
COVID_data_files <- list.files(path = "csse_covid_19_daily_reports_us/")
COVID_data <- tibble()
date <- c()
for (i in 1:length(COVID_data_files)) {
# on crée notre dataframe
file <- paste0(COVID_data_path, COVID_data_files[i])
newfile <- read_csv(file, show_col_types = FALSE)
COVID_data <- COVID_data %>% bind_rows(newfile)
# on récupère la date (le nom des fichiers)
n <- nrow(newfile)
# on se débarasse des ".csv"
date <- c(date, rep(str_sub(COVID_data_files[i], 1, 10), n))
}
# on ajoute "date" à la table "COVID_data"
date <- tibble(date)
COVID_data <- bind_cols(date, COVID_data)
# On enlève les variables dont on en a plus besoin
rm(COVID_data_files, COVID_data_path, file, newfile, n, date)
head(COVID_data)## # A tibble: 6 × 21
## date Province_State Country_Region Last_Update Lat Long_ Confirmed
## <chr> <chr> <chr> <dttm> <dbl> <dbl> <dbl>
## 1 01-0… Alabama US 2021-01-02 05:30:44 32.3 -86.9 365747
## 2 01-0… Alaska US 2021-01-02 05:30:44 61.4 -152. 47019
## 3 01-0… American Samoa US 2021-01-02 05:30:44 -14.3 -170. 0
## 4 01-0… Arizona US 2021-01-02 05:30:44 33.7 -111. 530267
## 5 01-0… Arkansas US 2021-01-02 05:30:44 35.0 -92.4 229442
## 6 01-0… California US 2021-01-02 05:30:44 36.1 -120. 2437211
## # … with 14 more variables: Deaths <dbl>, Recovered <dbl>, Active <dbl>,
## # FIPS <dbl>, Incident_Rate <dbl>, Total_Test_Results <dbl>,
## # People_Hospitalized <dbl>, Case_Fatality_Ratio <dbl>, UID <dbl>,
## # ISO3 <chr>, Testing_Rate <dbl>, Hospitalization_Rate <dbl>,
## # People_Tested <dbl>, Mortality_Rate <dbl>
Après avoir importer notre jeu de données, on “nettoie” (séléctionne, filtre, corrige..) les données, pour rendre cette table au format tidy.
# correction des types des colonnes qui nous intéresse
COVID_data <- COVID_data %>%
# correction du type de la variable date
mutate(date = mdy(date)) %>%
# correction des types des colonnes
mutate(Confirmed = as.integer(Confirmed),
Deaths = as.integer(Deaths),
Recovered = as.integer(Recovered),
Active = as.integer(Active)) %>%
# rennomage des colonnes
rename(state = Province_State, confirmed = Confirmed,
deaths = Deaths, recovered = Recovered, active = Active) %>%
# On séléctionne les colonnes qui nous intéresse
select(date, state, confirmed, deaths, recovered, active)
# On remarque que "Recovered" est dans la colonne State par erreur, on souhaite donc
# l'enlever
COVID_data <- COVID_data %>%
filter(state != "Recovered")
head(COVID_data)## # A tibble: 6 × 6
## date state confirmed deaths recovered active
## <date> <chr> <int> <int> <int> <int>
## 1 2021-01-01 Alabama 365747 4872 202137 158738
## 2 2021-01-01 Alaska 47019 206 7165 39615
## 3 2021-01-01 American Samoa 0 0 NA 0
## 4 2021-01-01 Arizona 530267 9015 76934 444318
## 5 2021-01-01 Arkansas 229442 3711 199247 26484
## 6 2021-01-01 California 2437211 26168 NA 2309915
Population des États-Unis :
Ce jeu de données contients des informations sur la population pour chaque État aux États-Unis.
source des données : https://data.ers.usda.gov/reports.aspx?ID=17827
# importations des données
pop_data <- read_xlsx("PopulationReport.xlsx")
pop_data <- pop_data %>%
# On séléctionne les colonnes qui nous intéresse
select(state = Name, population = `Pop. 2020`) %>%
# les deux dernières lignes n'ont aucun rapport avec la population aux US
filter(population != is.na(population))
head(pop_data)## # A tibble: 6 × 2
## state population
## <chr> <dbl>
## 1 United States 331449281
## 2 Alabama 5024279
## 3 Alaska 733391
## 4 Arizona 7151502
## 5 Arkansas 3011524
## 6 California 39538223
Vaccinations :
Ce jeu de données contients des informations sur le nombre de personnes vaccinnées “v” au jour “j” pour chaque État aux États-Unis.
source des données : https://ourworldindata.org/us-states-vaccinations
vacc_data <- read_csv("us_state_vaccinations.csv", show_col_types = FALSE)
# On corrige le nom de l'État "New York State" par "New york" pour empêcher les
# erreurs de jointures qu'on fera aux étapes suivantes.
vacc_data$location[vacc_data$location == "New York State"] <- "New York"
vacc_data <- vacc_data %>%
# correction
mutate(date = ymd(date),
daily_vaccinations = as.numeric(daily_vaccinations)) %>%
# séléction
select(state = location,
date = date,
vaccinations = daily_vaccinations)
head(vacc_data)## # A tibble: 6 × 3
## state date vaccinations
## <chr> <date> <dbl>
## 1 Alabama 2021-01-12 NA
## 2 Alabama 2021-01-13 5906
## 3 Alabama 2021-01-14 7083
## 4 Alabama 2021-01-15 7478
## 5 Alabama 2021-01-16 7498
## 6 Alabama 2021-01-17 7509
Régions et noms des Etats-Unis :
Cet ensemble de données contient des informations sur les noms des États-Unis et de leurs régions. On va se référer sur cette base de données et y faire des jointures dessus, nous avons donc besoin de ces données.
source des données : https://www.kaggle.com/omer2040/usa-states-to-region
# importation
states_data <- read.csv("states.csv")
# On séléctionne les colonnes qui nous intéresse
states_data <- states_data %>%
select(state = State, region = Region)
head(states_data)## state region
## 1 Alaska West
## 2 Alabama South
## 3 Arkansas South
## 4 Arizona West
## 5 California West
## 6 Colorado West
2 - pré-Analyse des données
On veut vérifier l’ensemble des données pricipale et on s’intéresse aux variables principales ("confirmed", "deaths", "recovered", "active"). On veut donc savoir si les données sont cohérentes au niveau des États-Unis et à un niveau pour un État séléctionné.
Au niveau des États-Unis :
COVID_data %>%
# séléction des variables principales
select(state,date, confirmed:active) %>%
# on transforme la table du format "wide" au format "long"
pivot_longer(cols = c("confirmed", "deaths", "recovered", "active"),
names_to = "variables",
values_to = "valeurs") %>%
# graphique des valeurs en fonction de la date
ggplot(aes(x = date,
y = valeurs,
color = variables)) +
geom_point() +
facet_grid(variables ~ .,
scales = "free")## Warning: Removed 33923 rows containing missing values (geom_point).
Au niveau de l’État Californie :
COVID_data %>%
# séléction des variables principales
select(state,date, confirmed:active) %>%
# on choisi que les observations de "California"
filter(state == "California") %>%
# on transforme la table du format "wide" au format "long"
pivot_longer(cols = c("confirmed", "deaths", "recovered", "active"),
names_to = "variables",
values_to = "valeurs") %>%
# graphique des valeurs en fonction de la date
ggplot(aes(x = date,
y = valeurs,
color = variables)) +
geom_point() +
facet_grid(variables ~ .,
scales = "free")## Warning: Removed 840 rows containing missing values (geom_point).
On remarque, d’après les graphiques précédents, que les données des variables active et recovered sont incomplètes (données manquantes : on a pas des données suffisantes pour ces variables). On s’intéressera donc qu’aux variables confirmed et deaths.
De plus, on voit que la colonne confirmed est le nombre total de personnes inféctées.
3 - Création de la table principale
On va maintenant créer une seule table. Cette table contiendra les colonnes qui nous intéressent seulement. Chaque observations aura comme identifiant une date unique pour chaque État, ainsi l’ID de cette table sera composé de l’ensemble (date, state).
3.1 - Jointures
Pour créer cette table, on a besoin d’éffectués des jointures. On va donc se référer sur la table states_data et on effectuera les jointures dessus.
# table states_data
head(states_data)## state region
## 1 Alaska West
## 2 Alabama South
## 3 Arkansas South
## 4 Arizona West
## 5 California West
## 6 Colorado West
data <- states_data %>%
# on ordonne la table states_data
arrange() %>%
# on a joute un id pour chaque state
mutate(state_id = row_number()) %>%
# on effectue les jointures
left_join(COVID_data, by = "state") %>%
left_join(pop_data, by = "state") %>%
left_join(vacc_data, by = c("state", "date")) %>%
# séléction des colonnes
select(state_id, state, region, date:active, vaccinations, population) %>%
# on renomme les colonne
rename(`confirmed total` = confirmed,
`deaths total` = deaths,
`daily vaccine doses` = vaccinations)
head(data)## state_id state region date confirmed total deaths total recovered
## 1 1 Alaska West 2021-01-01 47019 206 7165
## 2 1 Alaska West 2021-01-02 47821 215 7165
## 3 1 Alaska West 2021-01-03 48118 215 7165
## 4 1 Alaska West 2021-01-04 48382 218 7165
## 5 1 Alaska West 2021-01-05 48582 218 7165
## 6 1 Alaska West 2021-01-06 48922 220 7165
## active daily vaccine doses population
## 1 39615 NA 733391
## 2 40421 NA 733391
## 3 40718 NA 733391
## 4 40980 NA 733391
## 5 41177 NA 733391
## 6 41514 NA 733391
3.2 - Opérations sur la table principales
Ce que l’on voudrait faire :
ajouter une variable qui compte la population en millions
calculer le nombre quotidien de cas “confirmed”, “deaths”.
vérifier les valeurs manquantes et les corriger si possible
obtenir la première date de vaccinations pour chaque État (date de sortie du vaccin)
vérifier si on a des valeurs négatives
Valeurs manquantes :
# valeurs manquantes pour les variables "confirmed total" et "deaths total"
data %>% filter(is.na(`confirmed total`)) %>% nrow()## [1] 0
data %>% filter(is.na(`deaths total`)) %>% nrow()## [1] 0
# valeurs manquantes pour les vaccinations
data %>% filter(is.na(`daily vaccine doses`)) %>% nrow()## [1] 14621
La vaccination a commencé beaucoup plus tard après le début du COVID-19, nous nous attendions donc à des valeurs manquantes. On peut donc remplacer ces valeurs manquantes par 0. (pas de vaccinations au jour “j”)
Première date de vaccinations :
# 1ère date de vaccination pour chaque État
date.min.vacc.state <- data %>%
filter(!is.na(`daily vaccine doses`)) %>%
group_by(state) %>%
summarise(min_date = min(date)) %>%
ungroup()
head(date.min.vacc.state)## # A tibble: 6 × 2
## state min_date
## <chr> <date>
## 1 Alabama 2021-01-13
## 2 Alaska 2021-01-13
## 3 Arizona 2021-01-13
## 4 Arkansas 2021-01-13
## 5 California 2021-01-13
## 6 Colorado 2021-01-13
On voit d’après la table précédente que les personnes ont commencé à prendre le vaccin le "13-01-2021" pour la plupart des States.
Opérations restantes :
data <- data %>%
# population de chaque Étatn en millions
mutate(`population in millions` = round(population / 10**6, 2)) %>%
# on remplace les NA par 0
mutate(`daily vaccine doses` = replace_na(`daily vaccine doses`, 0)) %>%
# calcul quotidient des variables : total(date actuelle) - total(date précédente)
group_by(state) %>%
mutate(`confirmed daily cases` = `confirmed total` - lag(`confirmed total`, 1),
`deaths daily cases` = `deaths total` - lag(`deaths total`, 1)) %>%
# calcul du nombre total au fil du temps : somme du premier jusqu'au dernier
mutate(`vaccine doses total` = cumsum(`daily vaccine doses`)) %>%
ungroup() %>%
# rearrange columns
select(state_id:date,
`confirmed total` , `confirmed daily cases`,
`deaths total` , `deaths daily cases`,
`vaccine doses total`, `daily vaccine doses`,
population, `population in millions`,
everything())
head(data)## # A tibble: 6 × 14
## state_id state region date `confirmed total` `confirmed daily cases`
## <int> <chr> <chr> <date> <int> <int>
## 1 1 Alaska West 2021-01-01 47019 NA
## 2 1 Alaska West 2021-01-02 47821 802
## 3 1 Alaska West 2021-01-03 48118 297
## 4 1 Alaska West 2021-01-04 48382 264
## 5 1 Alaska West 2021-01-05 48582 200
## 6 1 Alaska West 2021-01-06 48922 340
## # … with 8 more variables: `deaths total` <int>, `deaths daily cases` <int>,
## # `vaccine doses total` <dbl>, `daily vaccine doses` <dbl>, population <dbl>,
## # `population in millions` <dbl>, recovered <int>, active <int>
Valeurs négatives
data %>% filter(`confirmed daily cases` < 0) %>% head()## # A tibble: 6 × 14
## state_id state region date `confirmed total` `confirmed daily cases`
## <int> <chr> <chr> <date> <int> <int>
## 1 1 Alaska West 2020-04-12 272 -64510
## 2 1 Alaska West 2020-04-13 277 -64903
## 3 1 Alaska West 2020-04-14 285 -65051
## 4 1 Alaska West 2020-04-15 293 -65243
## 5 1 Alaska West 2020-04-16 300 -65430
## 6 1 Alaska West 2020-04-17 309 -65612
## # … with 8 more variables: `deaths total` <int>, `deaths daily cases` <int>,
## # `vaccine doses total` <dbl>, `daily vaccine doses` <dbl>, population <dbl>,
## # `population in millions` <dbl>, recovered <int>, active <int>
# On fait pareil pour les autres variables
# data %>% filter(`deaths daily cases` < 0)
# data %>% filter(`daily vaccine doses` < 0)
# on remplace ces valeurs négatives par 0
data$`confirmed daily cases`[data$`confirmed daily cases` < 0] <- 0
data$`deaths daily cases`[data$`deaths daily cases` < 0] <- 0
data$`daily vaccine doses`[data$`daily vaccine doses` < 0] <- 04 - Questions
Cette section représente les questions qu’on peut se poser.
1 - Trouver le nombre d’états par région et représenter les graphiquement.
data %>%
group_by(region) %>%
summarise(states = n_distinct(state)) %>%
ungroup()## # A tibble: 4 × 2
## region states
## <chr> <int>
## 1 Midwest 12
## 2 Northeast 9
## 3 South 17
## 4 West 13
# on ajoute le nom des états en minuscule pour faire une jointure et obtenir
# des données géographiques
data <- data %>%
mutate(state_ = tolower(state))
# dernière date dans les données (la plus récente)
max.date <- data %>% pull(date) %>% max(.)
# afficher les états sur la carte (map) selon la dernière date
# (couleur de l'état définie par région)
data %>%
filter(date == ymd(max.date)) %>%
# obtenir les données de longitude et de latitude
left_join(x = .,
y = map_data("state"),
by = c("state_" = "region")) %>%
ggplot(aes(x = long, y = lat,
group = group)) +
geom_polygon(aes(fill = region),
color = "black")2 - Que se passe-t-il avec le nombre total de personnes infectées/décédées (nombre absolu/relatif) au fil du temps au niveau de l’État ?
Le nombre relatif s’obtient en calculant le pourcentage calculé à partir de la population de l’État. (le nombre total divisé par la population)
# On ajoute donc le nombre de personne infectées/décédées
data <- data %>%
mutate(`confirmed total %` = `confirmed total` / population,
`deaths total %` = `deaths total` / population)On va s’intéresser à une région pour ne pas avoir beaucoup de graphiques, donc par exemple la région du Midwest.
Pour les États de la région du Midwest :
On va donc tracer les graphiques des États pour chaque région du Midwest.
# nombre absolu de cas inféctés
p11 <- data %>% filter(region == "Midwest") %>% distinct() %>%
ggplot(aes(x = date,
y = `confirmed total`,
group = state ,
color = state)) +
geom_line(show.legend = F) +
xlab("Date") +
ylab("Nombre total de cas inféctés")
# nombre relatif de cas inféctés
p21 <- data %>% filter(region == "Midwest") %>% distinct() %>%
ggplot(aes(x = date,
y = `confirmed total %`,
group = state,
color = state)) +
geom_line(show.legend = F) +
xlab("Date") +
ylab("% de cas confirmés au total")
# Nombre absolu de décès
p12 <- data %>% filter(region == "Midwest") %>% distinct() %>%
ggplot(aes(x = date,
y = `deaths total`,
group = state,
color = state)) +
geom_line() +
xlab("Date") +
ylab("Nombre total de décès")
# nombre relatif de décès
p22 <- data %>% filter(region == "Midwest") %>% distinct() %>%
ggplot(aes(x = date,
y = `deaths total %`,
group = state,
color = state)) +
geom_line() +
xlab("Date") +
ylab("% du total des décès")
#p11;p12;p21;p22
#cowplot::plot_grid(p11, p12, p21, p22)
gridExtra::grid.arrange(p11, p12, nrow = 2)gridExtra::grid.arrange(p21, p22, nrow = 2) Avec
% qui signifie le pourcentage… (% de cas confirmés = pourcentage de cas confirmés)
On fait de même avec les autres régions. Même code que précédemment mais on change "Midewest" par la nouvelle région. (South par exemple)
Pour tous les États-Unis :
On va maintenant tracer un graphique à barres pour le nombre total relatif de personnes infectées/décédées au fil du temps au niveau des État-Unis.
Graphique à barres
Pour les nombres relatifs :
# Graphique à barres - Nombre relatifs
data %>%
# la date la plus récente
filter(date == max.date) %>%
# colonnes qui nous intéressent
select(region, state, `confirmed total %`, `deaths total %`) %>%
# transformation des données au format longer
pivot_longer(cols = c("confirmed total %", "deaths total %"),
names_to = "count",
values_to = "value") %>%
# on trie les états
group_by(state) %>%
mutate(tot_percentage = sum(value)) %>%
ungroup() %>%
arrange(tot_percentage, state) %>%
mutate(state = as.factor(state),
state = fct_inorder(state)) %>%
# création du plot
ggplot(aes(y = state,
x = value,
fill = region)) +
geom_col(color = "black") +
facet_wrap(count ~ .,
scales = "free") +
xlab("Pourcentage de la population de l'État") +
ylab("État") +
ggtitle("Cas infectés et décès par rapport à la population de l'État") +
scale_fill_viridis_d()Maintenant on fait pareil pour le nombre total absolu de personnes infectées/décédées au fil du temps au niveau des État-Unis.
Pour les nombres absolus :
# Graphique à barres - Nombre absolus
data %>%
# la date la plus récente
filter(date == max.date) %>%
# colonnes qui nous intéressent
select(region, state, `confirmed total`, `deaths total`) %>%
# transformation des données au format long
pivot_longer(cols = c("confirmed total", "deaths total"),
names_to = "count",
values_to = "value") %>%
# on trie les états
group_by(state) %>%
mutate(tot_percentage = sum(value)) %>%
ungroup() %>%
arrange(tot_percentage, state) %>%
mutate(state = as.factor(state),
state = fct_inorder(state)) %>%
# création du plot
ggplot(aes(y = state,
x = value,
fill = region)) +
geom_col(color = "black") +
facet_wrap(count ~ .,
scales = "free") +
xlab("Nombre de cas") +
ylab("État") +
ggtitle("Nombre absolu de cas infectés et de décès") +
scale_fill_viridis_d()Graphique Map
# création de la map - nombre relatifs
p1 <- data %>%
filter(date == max.date) %>%
# on séléctionne les colonnes qui nous intéressent
select(region, state, `confirmed total %`, `deaths total %`) %>%
# convertir les noms d'états en minuscules
mutate(state_ = tolower(state)) %>%
# obtenir la longitude et la latitude
left_join(x = .,
y = map_data("state"),
by = c("state_" = "region")) %>%
ggplot(aes(x = long, y = lat,
group = group)) +
geom_polygon(aes(fill = `deaths total %`),
color = "black") +
xlab("") +
ylab("") +
ggtitle("Pourcentage de décès par rapport à la population de l'État") +
scale_fill_gradient(low = "white", high = "black") +
theme_bw() +
theme(axis.ticks = element_blank(),
axis.text = element_blank())
p2 <- data %>%
filter(date == max.date) %>%
# on séléctionne les colonnes qui nous intéressent
select(region, state, `confirmed total %`, `deaths total %`) %>%
# convertir les noms d'états en minuscules
mutate(state_ = tolower(state)) %>%
# obtenir la longitude et la latitude
left_join(x = .,
y = map_data("state"),
by = c("state_" = "region")) %>%
ggplot(aes(x = long, y = lat,
group = group)) +
geom_polygon(aes(fill = `confirmed total %`),
color = "black") +
xlab("") +
ylab("") +
ggtitle("Pourcentage de personnes infectées par rapport à la population de l'État") +
scale_fill_gradient(low = "white", high = "red") +
theme_bw() +
theme(axis.ticks = element_blank(),
axis.text = element_blank())
cowplot::plot_grid(p1, p2, nrow = 2)3 - Afficher sur la carte comment le nombre de cas de COVID a changé au fil du temps
On va créer des aperçus mensuels (tous les 30 jours un aperçu), ensuite on va afficher les subplots pour chaque aperçus mensuel en montrant le nombre de cas de COVID pour chaque État.
data <- data %>%
arrange(state, date) %>%
# on ajoute un id. de date pour chaque état
group_by(state) %>%
mutate(date_id = row_number()) %>%
ungroup() %>%
# ajouter un indicateur de l'aperçu de date pour chaque 30ème date
# inclure la première date
mutate(`date each 30d` = case_when(date_id == 1 ~ TRUE,
# inclure la dernière date
date == max.date ~ TRUE,
# inclure la 30ème date
date_id %% 30 == 0 ~ TRUE,
T ~ FALSE))Nombre total de cas au fil du temps
# création de la map
data %>%
filter(`date each 30d`) %>%
# séléction des colonne qui nous intéressent
select(region, state, date, `confirmed total`) %>%
# convertir les noms d'états en minuscules
mutate(state_ = tolower(state)) %>%
# obtenir la longitude et la latitude
left_join(x = .,
y = map_data("state"),
by = c("state_" = "region")) %>%
ggplot(aes(x = long, y = lat,
group = group)) +
geom_polygon(aes(fill = `confirmed total`),
color = "black") +
facet_wrap(. ~ date) +
xlab("") +
ylab("") +
ggtitle("Nombre total de cas au fil du temps") +
scale_fill_gradient(low = "white", high = "red") +
theme_bw() +
theme(axis.ticks = element_blank(),
axis.text = element_blank())4 - Afficher sur la carte comment le nombre total de doses de vaccination a augmenté au fil du temps
On va créer des aperçus mensuels (tous les 30 jours un aperçu), ensuite on va afficher les subplots pour chaque aperçus mensuels en montrant le nombre total de doses de vaccin pour chaque État.
# création de la map
data %>%
filter(`date each 30d`) %>%
# séléction des colonne qui nous intéressent
select(region, state, date, `vaccine doses total`) %>%
# convertir les noms d'états en minuscules
mutate(state_ = tolower(state)) %>%
# obtenir la longitude et la latitude
left_join(x = .,
y = map_data("state"),
by = c("state_" = "region")) %>%
ggplot(aes(x = long, y = lat,
group = group)) +
geom_polygon(aes(fill = `vaccine doses total`),
color = "black") +
facet_wrap(. ~ date) +
xlab("") +
ylab("") +
ggtitle("Nombre de doses de vaccin au fil du temps") +
scale_fill_gradient(low = "white", high = "green") +
theme_bw() +
theme(axis.ticks = element_blank(),
axis.text = element_blank())